
typedef unsigned long GType;
typedef unsigned long GQuark;
typedef unsigned long guint;
typedef int gint;
typedef gint gboolean;
typedef char gchar;
typedef guint gpointer;

gpointer g_malloc0(guint num);
void g_free(gpointer p);

void g_type_init();
const char* g_type_name(GType type);
GQuark g_type_qname(GType type);
GType g_type_from_name (const char *name);
GType g_type_parent (GType type);
guint g_type_depth(GType type);
GType g_type_next_base (GType leaf_type, GType root_type);
gboolean g_type_is_a (GType type, GType is_a_type);
GType* g_type_children(GType type, guint *num);
//void g_type_set_qdata(GType type, GQuark key, gpointer value);
//gpointer g_type_get_qdata(GType type, GQuark key);

typedef gpointer GValue;
GType g_value_get_type();
GType g_value_array_get_type();
GValue g_value_init(GValue value, GType g_type);
void g_value_copy(const GValue src_value, GValue dest_value);
GValue g_value_reset(GValue value);
void g_value_unset(GValue value);
void g_value_set_instance(GValue value, gpointer instance);
gboolean g_value_fits_pointer(const GValue value);
gpointer g_value_peek_pointer(const GValue value);
gboolean g_value_type_compatible(GType src_type, GType dest_type);
gboolean g_value_type_transformable(GType src_type, GType dest_type);
gboolean g_value_transform(const GValue src_value, GValue dest_value);

typedef gpointer GParamSpec;
GParamSpec g_param_spec_ref(GParamSpec pspec);
void g_param_spec_unref(GParamSpec pspec);
void g_param_value_set_default(GParamSpec pspec, GValue value);
gboolean g_param_value_defaults(GParamSpec pspec, GValue value);
gboolean g_param_value_validate(GParamSpec pspec, GValue value);
gboolean g_param_value_convert(GParamSpec pspec, GValue src, GValue dest, gboolean strict_validation);
gint g_param_values_cmp(GParamSpec pspec, GValue v1, GValue v2);
const char * g_param_spec_get_name(GParamSpec pspec);
const char * g_param_spec_get_nick(GParamSpec pspec);
const char * g_param_spec_get_blurb(GParamSpec pspec);
//gpointer g_param_spec_get_qdata(GParamSpec pspec, GQuark key);
//void g_param_spec_set_qdata(GParamSpec pspec, GQuark key, gpointer value);
// GParamSpec g_param_spec_get_redirect_target(GParamSpec pspec);

typedef gpointer GObject;
void g_object_unref(gpointer obj);
void g_object_set_property(GObject obj, const char *name, const GValue value);
void g_object_get_property(GObject obj, const char *name, GValue value);
void g_object_freeze_notify(GObject obj);
void g_object_thaw_notify(GObject obj);
void g_object_notify(GObject obj, const char *property);
void g_object_watch_closure(GObject obj, GClosure closure);
